/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */

/**
 * @param {ListNode} headA
 * @param {ListNode} headB
 * @return {ListNode}
 */
// 计算两个链表的长度，然后算差
// 长的链表先移动差的次数，然后一起遍历。如果遍历过程中相等，则直接返回
// 否则返回null
var getIntersectionNode = function(headA, headB) {
    let tempA = headA, tempB = headB
    let lenA = 0, lenB = 0
    while(tempA) {
        lenA++
        tempA = tempA.next
    }
    while(tempB) {
        lenB++
        tempB = tempB.next
    }
    tempA = headA
    tempB = headB
    let n = Math.abs(lenA - lenB)
    if(lenA > lenB) {
        while(n > 0) {
            tempA = tempA.next
            n--
        }
    } else {
        while(n > 0) {
            tempB = tempB.next
            n--
        }
    }
    while(tempA && tempB) {
        if(tempA === tempB) return tempA
        tempA = tempA.next
        tempB = tempB.next
    }
    return null
};